package com.syg.servlet03;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 通过response.sendRedirect(String location)实现请求重定向
 *      sendRedirect内部的实现原理：使用response设置302状态码和设置location响应头实现重定向
 * 在Servlet中实现请求转发的两种方式：
 *      1,request.getRequestDispatcher("/test.jsp").forward(request, response);
 *      2,this.getServletContext().getRequestDispatcher("/test.jsp").forward(request, response);
 */
@WebServlet("/Redirect")
public class _02_Request_Redirect extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /**
         * 1.调用sendRedirect方法实现请求重定向,
         * sendRedirect方法内部调用了
         * response.setHeader("Location", "/JavaWeb_HttpServletResponse_Study_20140615/index.jsp");
         * response.setStatus(HttpServletResponse.SC_FOUND);//设置302状态码，等同于response.setStatus(302);
         */
        //resp.sendRedirect("/httpServlet/index.jsp");//这种写法是将项目名称写死在程序中的做法，不灵活，万一哪天项目名称变了，此时就得改程序，所以推荐使用下面的灵活写法：
        resp.sendRedirect(req.getContextPath()+"/index.jsp");//实现请求重定向


        //2.使用response设置302状态码和设置location响应头实现重定向实现请求重定向
        //response.setHeader("Location", "/JavaWeb_HttpServletResponse_Study_20140615/index.jsp");
        //response.setStatus(HttpServletResponse.SC_FOUND);//设置302状态码，等同于response.setStatus(302);
    }
}
